<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/%E8%BF%AA.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/%E8%BF%AA.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"zhengyidi.github.io","root":"/","scheme":"Pisces","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":"flat","style":null},"back2top":{"enable":true,"sidebar":true,"scrollpercent":true},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":true,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},"path":"search.xml"};
  </script>

  <meta name="description" content="设计模式 - 创建型 - 建造者模式">
<meta property="og:type" content="article">
<meta property="og:title" content="10.建造者模式">
<meta property="og:url" content="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/10.%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F/index.html">
<meta property="og:site_name" content="Zhengyidi&#96;s 学习记录">
<meta property="og:description" content="设计模式 - 创建型 - 建造者模式">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2021-07-11T00:00:00.000Z">
<meta property="article:modified_time" content="2021-11-13T14:58:22.502Z">
<meta property="article:author" content="zhengyidi">
<meta property="article:tag" content="设计模式">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/10.%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>10.建造者模式 | Zhengyidi`s 学习记录</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

<link rel="alternate" href="/atom.xml" title="Zhengyidi`s 学习记录" type="application/atom+xml">
</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">Zhengyidi`s 学习记录</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">休对故人思故国，且将新火试新茶。诗酒趁年华。</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-fw fa-th"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>归档</a>

  </li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup">
        <div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div id="search-result">
  <div id="no-result">
    <i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>
  </div>
</div>

    </div>
  </div>

</div>
    </header>

    


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/10.%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="zhengyidi">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Zhengyidi`s 学习记录">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          10.建造者模式
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2021-07-11 00:00:00" itemprop="dateCreated datePublished" datetime="2021-07-11T00:00:00+00:00">2021-07-11</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2021-11-13 14:58:22" itemprop="dateModified" datetime="2021-11-13T14:58:22+00:00">2021-11-13</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" itemprop="url" rel="index"><span itemprop="name">设计模式</span></a>
                </span>
            </span>

          
            <div class="post-description">设计模式 - 创建型 - 建造者模式</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">
  <script id="hbeData" type="hbeData" data-hmacdigest="1a1767ad93da746276ff96453cb99952e32af247df803040c3891d717f758909">22064b17c03cb0c0e58c99349b6889d0b31470871e725085fde7c8feed9af7efc8bb384a323cd3a373d4c8ece0a5d68db1f6ba79ad322f5568e63d40cbb8991550e749e25405473537066bf545333e2522eebbd0f12041def293e9f4aff95bdc40981400ff806caebf05b08fde0f3ccf815b07346cff4bdc3f85b365fa069cc17da22ca959ed995a369568072ee16c75a016b168dbe514371d8f7c9fb5302018b21a6888c977ece34595daa2dddb9985e25b84c751140e561400add8d7d132d4b9e7df27fc93e2080289e2b33c0cd451c7a4cb9a526c8a52b23d4c8ebbbaaa5314f0fb3e1b78c1289a7e7ec01a0671f94efc0d8400d5ad3e19037d70452ea58482aa353770fbeb511f64d5934d6d5bded6b099a2afad8afbb16bf87d6cb6e8ce1d68eebf968fd65c09c0b76cf074f45545d0666ff38e6990114e277e37dcd8300940f088c2253868522d569c53080e7e2abfdeb43381803290ddce909307970bab167bd8a2e59571b02f0c1ec845fabfe707490ad9c3724bb522074bfea8f8db4b98c814b45e5d7576c4fc8bd91596ccc380d785275a7c121d1dcc1856290cea857f41cafc0e3bce926a2d9a2d0ecf51473381eb70e3d316db1e404a8e25341ff3ec527cf3f415d566ee3be918c6c1a5c0210ab0624b622ea4816e953d84c19f4eac879e0fbbb245a5fb3d68a58bb4c4140e1987c3bc24bfb983bd1f4e4adad8489bcbf541433c4278ebc717647406e8e277524db1b658448ff7e8456990f7286fdd930456ef5c4f6c10bb14e9cd22ec16b82281bc686f8f83f502c06cdfcd1d2f96c95072b6c714b042c1cb93bc6d7eb502810bf64f68c8f71eed6f5bc78f0679f29939900344de7ef67a9373267b9d388a5b583afb8e09d552abf67b2bb366cb7b893c8fe58f5812b6689e76ff15330c82144c289a701a871ea8c4d1de22e748d3ca12dc72c6889743860fc6cf6b7c39a4d0012b8658e27c757543c3b4ddc7e967ccbadf1a6599b36f75a8552b8faf65a969b125ecdf63754997c174997e23f4a3db33a908df2deef8d9e59259b3f0e3d987bd5aa32c893d7599cdf39461a9087d8ea1d75945389671e7dcedf9486b049467470879ed7ec5a320aa6c27238d73b7482f18c84a47ed6b948878e7296f4637630d71e09d43ed3d389011a806d98f615006dd9632b1ff1ac6cea0774b8bbfd552fc9fc872944b7e6497391c13b644495b6e3f754b96b7418865e5a9677f4fb16ae22c2cf08f874d984d5c64511a70628e79aec59d9e46720dc8a861057a88543e6eea088be361ce2b21f9f56f066fd0ef60d69092e4a12d6ce5ce0b4cfa04f5864c0f2587eb126c7d309198ff528e276763a8bdfff70902b5ee8c8784ceb47a853ddd794fec8b971dc462d10fa2e8ad2f77e9ce78eea35cf4b81f48444288d79b5cdf88c7ff463d643738aa0286bfe91441c34850000d7f0331e7e2c0c751d72712a28400d56d09345f30b774d003b46ee1d9dd1be083cb4ded4a71a97f699295f0739514323f0e7ab412b4441bd04845066530ca8a6bf62c4e95cd48e21233f496c498917effbd59578b771f0439e03690e39c67178b9e1aa0b6ae9d146d3073e770ceaa44fea41518f979344a244ab492fa449583b89f41561723490028776d6261da4e98f749fc1119576c77b6cb68e5909f9ec72aec85417953bbc02961f9ad868162762c3538f568b846f7788e40232a18537fe30c2f70ec1c1fc2a11f78a6f1d277b588454729d7b7ce44987bf4887b624d920a44b3c42ce0e17b41e9fd1fd6c799a856286ec29ff9e38355e6d4c1acb4bd5124a98b4aada16312e97ef25b36a0cc262701cec7554a05c2bf05c0954ed39fd41c93cddd72b0fe8fc7d4792907f286a7ae44038d0ba37ea50a14e6014d3e60cb7f1f5ddf34f58b063adc8b7d9ecc7321ce5954a6a104499f686f2bdf7462e7a4b36c55fee5c0340e93835b24d919b010e11e32e233909943b1ce7b22e3c196f615f874ae35a462ec1628aa101148b98f8ced3d51dc4882228875eda9ac5d63b345650b5a1b28f59a506d9477e79e263eb471cef103d98b3797cb6fad1bc8dbcbeb6f2d31854893102a8fb4ed23b775b7aac83d892da3e0f00ad60b9e15f63576fef3013eef3b5c39a1985542c130c69d331e6574808cffc00f0a542bf7baf664a634ad30c0b98101a256524ffa7bf5e44be57dd55813b681173959d90bc9e217521e245cba332fb09b7c4885bca5384f6fe18b7e87e7c6fafa5f32696454921893daf9442d4214425bd3581513eef752d4e66be3e6d26b74bdbb477938d23fb38f6046d56697d425238b3d37bca94af2ca759c60d0787bf21f90ea5086f67dd2f3b02b07c9914bb753947a84345adfae2989e557ce1de8eae271d74c402ea547886b6b60b8c35729322592bd2267a5258ebb5ef7ed604c9a0dc55bd9ae945b3e8240c573afdae26e333a36fce1d0cb25922d3f8707a742e56585b6f856cc2a2648b366363a0f9f6e8a14bcf9184985ccd7df5efb3d19dd0a115bc1e1d5baae533cb53ebd25dfbff6ace777a472b4d6b2efb234eb8fc687b067c81eae38ebebb9accd2188dfedf5f73f19757987d99b05312576caea7d9abf81a6f54b79b6aaaf47cb1181271463b3a953c798f622f0561b53696d7827233c57e940defde1dfd0554f17876cb9b5e703b8ce10d4271b592c769c4dd47fb272a654e0afe0f1b176092c2baa5a3556cec68536a270abfd9c3e3e019099b156b061130377ddf6b47791fe83e9c9f884e17300681ececb2a5534924635217eb45b7560cae9e6522027e1ee25f06430e1cbfae4acbe0cc0978e5e1c0238eba2f7ef9fe00e2067350a46bb0a29b533e3473821db9b99cf293a59a50f9de95b55dcfcfd43749a3dc9649134d45f412cdc9da7a7b4b0440e9429e05167ed8601902a900dcf866a26b8c6be578ea523be260ad7bad3ff278d1dcd9670b03e39549406a65424521b40f36ca0e6356f001f6c70e35d9c13cfeb65282ccc859d4893288b602f7da93fe72f4ef472a2dffdb8e2bc0530607da04ceb3c7055ab11a90d3e02fbec63bf1586cca0fa12ef64d61db67fce7278f993ba53ffc9f5b912d627eb250f552e2c8852bd15c1ea56b0d0ac94a56fb534334c28268cc0d38679d16a2e3444f3c3a476829b0b477719f158b978db5fa276404b97c72802eb743dd892e44d21096d69d2a2de37a1003db7218a261e679f73ebb6157f9328dd3671a55725576e6ba20fa6d69717ae2d7b5f273ac3c55ad5d896a9de30ad6263f75be4f56725a003e9f091f89393bb0637931bcb78bf0a8bc51757e9342345e350b6edbe1260cab87ae16102c16b68633571a3576bba95178e30a69d337d9a979f9db296c3e5d802545279c8cc03c1024af53c082d3b92557ec4036be2806b44148f10b1ebb52b3fd4eff94792563f2c531f3cf9639fb35656bd53769bdc54d26fda63ef29a8309f1c8b328182ab65bcb292ad5381914189313f6263a5bf8a05a9b62690d79a6a59634ced21422b74d0e74c39566bfc7707a49db59b34b08552e409cebc47aa9d6169f657af488c196c172075db403f65a11b4682231b496da87dc92aa91c21507564b5ddc5ea06a4b067fc333d4e561bb41d6506996da352d76beb305585193d8a3d8dd57016236adb058db8eea2b79dee0b121609ee9e6989a929d11f5825509e9fa2bf7033ba71cb5f2ed9837780309c4505604e411b1217aa3138f245265fe7e7cf983bcc70c501ff0c076b81158c9d9273dea36aca7b4b8b954925c6d5cedf503face84e8991de8935a1e2336f7103446dac29ac37e898c2ae279502190062f819772a68490067f002c927d55e603f2cd79e5a9014fdf28289bbdf313d64ca4acdf5b359bde587ba5a5dac1189afd7a5c64d8c5f893a849eaf5b525c105fe97006d1255054fdbd80eae286c213788cb92d4bffa4464fb7667db5ed816aa7fc806368baa245ea095e08302f6dc239ac06ec4ec85ebeb3e843c74e6ea86c3f8f6276c5a88514f5c3900dab92b7393efb89f7aa2d9721b158299504364100d4031f1ee49e5a8842aca3e5908bc095f56e5658251bfc2faef06be9999c9311e5c56226f67e8e72348dbd7f710c905954fd8c2cf9614d2ecd572db43baa9d3b40a34a8a68297eb9e31ed5132df66faf897b9b4a57362d7a59bfb7c70fd88ed3c1c53b22a7d2eb7ccc9b16a000a78a6a74170adf4905f3d8fe8dbbdba474637cf28f915443e71577cb2bdf0e7138d15f803f5f0848793796b06e47789f6d28bc3f1143f5fc674b437ae09d724b0539d73ac539fc4038909c8dde90b44d1ae7cccfe7742fe8ec0b5a6803b479f5ed3361c9780ebf3f58beead8ab6c214fd25391b5dd7526fde2b634a9a7da1155e6a9b6b88bb3ad5c86c8c4e4902918b1042b16a40d105810c8d20cf1755e844ac0171772c411955ff1c3daf61fec2d7693ae0b5b5d9c0c0009c8ce7b0e4d58314ce0ff6e60a5c0f9848dd2c9acd9066844bfbfb8d4c8cea6babb5d11d6a38ff4b510c916fb3be09ba8df10db0a1b2fafb42e05f93b72364fe53964244ee69f20343f9d704f3ac53b038643f5dcc152b905883f17fc90533fea74ed7e2def9114d16ac426726aff6e3ab40560bf9326b5d4b61e2d37144f084056b3993d52681b3933ba77b06e22aa5c13113fbfb267ee7896b9096035779538f045f009c78fcbdee6f00b6f2648e1050aaca62b7e8b5db66e37e5c958ef0f79c20fb8096744b3a23f8242570bae5000bd799db1ac6fdb19c363208adb75da3970dbdee56c4cb07ee86639a25f98df9660b8a465f00af7c474dcecd5f88223a104b43215d63e2118ac6f950802025eef51c94aab6fba2a3d7a47955423d312df305352c5b528634ae759337d1dc5e1c1a44be1838087cad5238528db0aeff19efbe057c1095a2f2e661d01b120b0fcbb66463414259a16a7bb457555b46438c20d4deb8b71c7d3f4be79965c3a2a8f839660cb6685643fef7f9a0c76c4669c7eb787003b8c187aee34ab94eff9eab5a11f6050d89b528f7ee07e4aaaef6b7271fed8f562e79f7b11b62abf67cf9cb063d643246b2be3d3f5a1eb6b3b6774ca4ac9b8e29ec87dbfd66940cf47798af49f2550f315d8a2ead01e2c50b33d50e802089c7ad0ceb2227e71158a7e2b9128eba854902c521261b7a53229f2fd729ec772d8b4163d0bcb1212a19dda6deaece4d22983795fa44a47989fd1112046e27b1a1b899794b2baaa18417ec9cc12f4d1b167eabb44983d17aa740d1758b680afd35d2522f488437ab4e41f9f4153e45ea54dd78e798d12a6388eaaf8e6ca69c323e7a737052481cf0d0e27a4888c67706c0b0f2f5574da7669089647c7a39dabf93274937b65cfbe67ca93326fdd327da720cf253509f8ec48867af4c6538d2114f7a6c86846fee81baf8e3ba16d802ab4bcd285ebc416cdda9ce5a9cd07457effe54f4c055a557a1f481ab6369ac945bab3283533790dcff514c627525f42f400bd023a2867a8d363412bd999ade8f091a3326ed47bc45e67768556deb6af4f7de5572e1b51eb84378b95b259964d2c23454a603c83f88d7810cd5dbd7ba84facca0012dfbf8a387f4763e10fff3d292fc92c6d2b480afbd2efa4225b0a00b9c77bc3c2c862c00778e5149f5a187d5cfb495fb4921aaebad8cacb9bc48be009eb9755f52e2c2af4b956c68391fc9a2ac47ab0850a7092ae5ddec7157bcfbc68e5bfaf116919b6955be88bcd42ed836530b2f5a267a9972a41a8f1fd9b0e7db85bbce2ce12b84044e000e19db478e42854df7ed18e953dfc1427fd444cff6bd3466b8760f4c4261c887673e5f05073cbddf65fc068d5b34f939eb8edb951dc2eeb9fcb63cd155843721d59d29ac05e46cdf87619e3fcc91e65cec5629b8acdf872b744d39ffd0bdf2b0deb38179bd0472eddf7347acd98bcbd33b2eb4894f88698ebf6b039eafb1c9b295f028072d2d8f0f73487c239a3afebcc9dc166e4f935239cacfc8d748a27ea4e51a3f1b2a3cb25fd3d958038a8d5b54fe94e23c64f59b6ced9e2697d74455506429d8a98a2871a9959d1eaf40c153bdf15e8143afccc0f5f951044dd39c833cf2e4756aae218534ac0523254a765331cf1475a564a77dd12db3cdf8b47b26224e86eff675d6fd2be96186b013910e81d3bf3a4d47a077f0dca6fc98abdc5d71528dc1a9d78b67ca5d22d4e866e2da33dd280b6cd0f96b5c09fd8b57b2ce22f5aea73bb3bedd234d5ebe78db8374391e51d5af536bdb622db9412c56e066079ac39438118b4f8603c3af611a7f481691b9dd149f74a12efe1ce556b2449d1ff16b66e821bb447e30f1d7fd097ba5f00ad14adc6351d57ac2271ed3211c2fba18eee381c94516ff6b9ab60f0e1114f8eb246b68b392330fbbb03695a9a2ded14ac497aefdd6e3781032917fbcee969aa0d460b88f3b0aeb7385970e6387fcf173dd99c63bd12d89a14186bb90325dfad2dcdccac6a7bd197e11474491ca7983746b90356b0ef4beb8d9070a1f1a52e1bfa87f9b9dc71a1c7be039978dcaca0def96cc1f205e531e21a306e77d5a7aa83474e6f561db5e2d0edd1f6a35b0ab02e0363a5c6fe180916d49515f60f267807658fd07862acd52e0a729e1bc2bf57cfdb1ef09bf43fcded7f350713e85c0ae3f6a32c703b81bc7c8aa88a980848fc72575b18cdb604ca0161f97155157b37541f6af2d56603e5487c52497dbc3efe812cd7ede2a22cae945772302db3c35fbeeedd93b80381e73c27b1b1749eb29510f7dcb0ef2f88e653b405364adde2919f5b4aa3fe9a0b182911732de4cd7a2e76ff7bef890e77ad94d79557ea9e1ea576cbd8c8d9e5d23ead52e3eb18d37be27b93586e5d13939b69eb427820b7a00608b00e49529b4bbc0916f474e781060fe8b06758dfae0671c71c4b31254217ea7aaef0bfeaed460dd5eba2f8f23dba92fbbfdf48a3d8a775f803a0c564763428c2e605c6911550b976a9a0c3bca7067e064729dd1072c426912137f7dd79f0e5c3a3e976017e63d0a40aa13f23f9db57911e1914439868668e426b124922f19f6b79a1e663090125cb695a9b7f3a5283284825f90679ae212c9e6e188eaca4d8f37b1062fe5115e9ae141402446c6dced936fa20bacd21a97e258d767c87ce32ffefcff0791a2fecf2d7331b349d47df8265150267afe77e89fa7e71805793033abbfed650ac810b526767390dbac04795b6a7b31e140eaeb7ffbf4b34215d2ee3c23534547258d9aff0048b083d5356288e8449869a8392b5dd58fee30778513b038d859d61a11132489bc1013a92829282fba60de7d344a6d1a8e270450890755d7a23314736214e4ac41ff46fe20afde74674de43c0a1b744a00ce6aac72bb31a867cbd3ca40212cf3daffb6be88ef56e3b76269325353914afc07c5ffd26b860dfae2e5e1e78a2d99ca63bba36b39a448840a5a55b26fbd00e522a01adf7df816be6ed5da4d70cdcf67d00e5afd10bfb3a64cb8b65de86c788577f0dff2b95a90f3c5519369775283f1b6ff85b1611dc690dfef1af5f7cabe93355ec0ee0d1d505911f2a1c7a749a9eb596c4141d2f5cafb54e5679619d8386e2135777aa3ff9e6143974bf73b7d7ba878e0fe69a48f9328477b254d1f1f733b2b9ddba500c0c1aafbb9b3d9137bc7be72a32e886db174bc991a2d72c5961cbd7f10004c7863dd0b0c16518372b357d00088128c0be920ce87ac63415d5988d5e4a523f36b3d9d4ce43559d4e7a4bdab4bcdcde43ee768ecfe23a2266ad571e0ae059b33cdd56f50016c342518b2c45a19862504c63290851a0fdc112f741547e5c1452427483eb99d6e77f6cc3842125424d9de806d987daaa330a7a055d6f8b48dde2e25e9792c15f231acf35910d56bf5012c15633f13e18d56df4d584b82ed1bb80334f7ffa1ad2d09e95ca26b3cfd080bd6e9834ae371dbb738de487ac0c65a5433801cdadb6c79f1dcbca29d5002d6f6f997f1362c5c93344cfa3b4c212904ac1c813e6b4a8b5219e447dfefe44e30d2f7682571a27d27b72d6e282d9588d9d272d431f92f0738e425bf00d59e4cee8cda3b494ab9922ca24cdd0a56ddce9443f72a6e455eb4237291e9c706661a694c643d8ab79e825d7b1e0e5caac8d1352f1cf87828d532e1748176c668222a2690fa15a88ede040614b6f170f4ea85324f2431532ae99bac5c88517febf833bbc6609a5022973dcc6b115e44548f190461047f9a880bc9f7864bf921e4774d213f46febfdeed76320f07371d07ebd30be5807f1b0c915cb2c81ef6254e0110fc0986b98d565b168055aaba343ff87a3e516638fb3353d0a503de1587aa1e6d379a89ad355b7acbe62b4de1ce420871ad2507eb728b9f9cc05129f3884a86e5de6bd6a9e4507029c1bb372e89004e2ebed1b9671c50342f79f27290bcca871952d3a86b229f9c9fac0c0f830497ec9a8e14ba3c6be65d2d2971e01533b541953bed33724617ef8cd020f972e921e21616dd172814ba0718eb72e1ba5eff27244eba4ea7cc36b225a405e57860ffc72237e553bc2897ad98a4c8b0b92398dc43b9f1fd773bf5f00939e4104931b485c52b6862e850a2128f171384a1122c0e763870ce94d84d406a9ba00476aced0fdeb7f192145afc1452d3940857d8927e89544d95df24538c36116ed2f432689423de71b00b866ae894a32f3ba6368fc3ff75ee9f857fe75b6c85efb8895dc704de8139b6769b1a14acbbdb24d197c938364f07f7a50cbfc06e7bd0286471f0c91368cdd53b68bbbd4154870e12279bf63b845a32a34dec80446f7ce2b53c75ee07139aadba690def865f1f99d12350d3b83f5c5a4322d7662060f64b606819b4f8f5c42d2576a199eecd8462c768d30407a721ef4e8c049db69beec96ef26ccf9cb3c70beb49ced97016d6b3884d9bce07e967881f02ae60635cf76a32683829886aa77c508a66c20a0a030a58dace7d959bbdeebd6473515915b6592a3bd7d5b8ebb12cf3ab8ea0a7e42d788b73e158c7fcbe06927cf99fde370b32b301f37569a1e3b332ab0e14c6d8bbd9db2a68853d9636ec036c0af2b3b57d08dfee883b306312ab9f49ddcd09fe64cf46b108bd49ef64507dbfe72f547401d6f8a54448560c8817cb5f6daaefc85b4e39c0276be632963e91dce1c2779d38dea0340047854e6145399481b20cc63f9f7ff3298bf001c891f0692cd6febadf67f3ce8844c21c63e6dbf6b27a32454b187e68e2933327ecfc9b5b104ef27643925bfeae9d54e97d7752fb71a4c855febe48147553f07e5c344deca77eee73835f0d6eb098eafc75436ac3a41cb1b71a870fb4cb4e263dc796d6f0c3856de9fa8d0b9c5a04d82619295f0b2a0f06fb8d95a769cbf3da21df591c2ffc7eff3ffd9e041c1d924892fb67f03c74ec66516a6e7a8f848d06032577f2474e457e7e388ab0bc9040be11807ea66b8e3765cdc15bf842381ad9717c56dd492745c19dca0762402527184c51743620b573c4bbc128019e71961e7d1738c0bdfa5869bcc8936d6e90300d434f4a04e43b36a1992770c9f4ec3cb1e4572b29ecf15b544a712703783468c85d5fa8154dc17ff31f9b90b3fd40b10a2bbe0694c28fba4e56ca9677f4f2c66d74da9307f8670517b284fa304a399beb5a76c362f64dc76139e82a4581c91010e26001d91b720d5660dfc3f1aae638a775f7f42dc947a04868e56fdfa0f54e5a3201f894107bb79b34d96bcc4ec013749ee6c3c221e2c16f921df0ad773432a398efd574155c0adfb08f492928d105328e3ae03e076760d53b6652dcd2002372a63d486059a44fa0981a96d4464a551a99379f8568897956b86f6612c36c84eac48d59ddb6249bd0237643ffa371e8dd2f71095feb69e2d4d2af159696369a3676ba33dab2cb5cbf8121805973f6a8b3ec1aaeb936e413ea6195326cb9c9e1d5b7a3482a99b833ce2fd79d84d907bdc921f86e152d55ec109b1f28a6d3d43d50e02c28bd42f41aa10dd718c73fba91350d0d1cfca7cf3030f965191153789e94cf70d7d5ef6854bafa65dbec4982e3490feed203e92b7f851ef978e13ab1b1519fb8b677b8cdbe0e0d8e8179f03f931f57e7d8630b25b0a75e262bf6ce8970aecfbe4909eb980afea41aed2ac7751ff565b678c0052ae1e6ed35915f8368ca17beea96267395de9d86b14eeed9bee9e0e62141f730cf73b6e02c5d1166588e325d18287e8c87f40557ca6654b71fef3c28df56dea70666bedf577dbeaa92c147010fc3d91334ce164f5e1eadae11e9af7cf8c4aad6a2c3b86929a2254b110b36e4938e23ec1eee7ea2927e1617b6228c20ac26198c7eb9b977a00595e9509ccb52db581f9f453216fd759e1acab5674309e45a87ec004dc826d1bb59626ac674ebee1aa75f3a41d187bb88e98107cac7bc1bd241c8a2835e9a52624ae2a77502390430ada14f57574bac6f8d602a93d00a428444063b75ec84f51b8eba0ae1840131c4f46bab3da1d7c0cea9d5b0ae6773c4e8297640c9f698ab0da89a538c0c3903d82fd2d779939778a1d846112100ef4e1fe26419beb224462348e22f655755706f001b6f75c9d0e5bc13b1c9c0d18727218fc4e80cb7fd108611d213a24521b406b3e7767ea8abd84701ad97631aaa9ed394753d9d23c96c67f19391e8d75f39f6e4f70fbae6534bf0965c601fb0d482775c6ceffbae6181ee004c8787540636554dbd1b1e8f723cdfa4768b154f9d84101e74fe2686591156cf0259ee79b7081197c0f23c2c795fdd28d9d26b10aa89a96486d08db57d3e3e61a3d67f42bb5c812ae96aa354c258872d60b33d4df5a787e1c1a2c7b35e9d8e05684e8cd8dd210a13de26d0dee7873c5eeacf1363e34053c73f5703a77636bb26dd477126462260657b0e66e6230653966783ca8030de749635e431b9c41acbbeda057ffc402ce5d1980914967da535348becab43d674f6e3c89ae3ff55a7e7fee73bc2a34080655cc35041a63a626b207b02d2a74b1954059446cfdbdfbd1eef5acf7946f81a66ec70fedfc234dce2a705e2b04ce5c11f15bfce6b98849419ffbd7d107e6b30f804e71e837487414faf518b1101cc00308e1fe1b3ea33f4c6da31841ca10c5032da934ad5d4a11e099a4d39d534cf77ef3536a21be06ab2ba2b97af04837ac71df420644bf5448acb03770177f7971325eb14891a6e420afe342c386a4bdbbd568da8c9aab315da9b07d1e384990bafabf9e60f1f96fb38698226badb4b5a22baf78b89b099be4c5b60f53ef9586e56506cb41084e70bddc040bf45302f3272825a854de93e42532d68c925fc635b5c5e3ca71f23a708f1aa45c127d54e42f7fb4c4cdc38a83325e866226a471387b28bee78e6b96b231bd50332e37e088ebeef0302b226f13f13bf236de72165bd85a4641a5f5f8f092ba7afb04dd5450cd950ec705069c8915e4f2354956fa705f184b30d59da804aa3ee7cc921765403b5a5534c86f8b4bac101b9c8e710f899a40e1aa95dd5770ee11f18c27cc1f6e16f3071b2de1debb24834fa83bcae065cbfe57dd8a8e38f39b71126c57b25984a3c6e241a6bff6234538ceda3e97fbe4c1336c7d59fe4c85310d92d00fe89b9aea2c878ea19cc0e21748a336ef9618d9f2d9bb0437b3978da4c61d29bc39406dcf9e2e7ae6f2e05813b60e38d5ca1a74cc114ba4dcf862f198e0471aadad05c1e09b46070f14c47db2b8e41a044c2f2514195fd151c95956975d2d0fbd86fa7f48356db500f8b08320a19bfd86b78d9f441ba228953bdefb1175c811a68c913885f7f43fe6fa116c587b77b949e14ea54b8b74a70b661cd7fe4ac8042e4532756d6111a69eb6a7b46aebdeccdeaa6db8d8e87ee0700e115b1debfd95171d14964f0f1e478f33d25aab6fa8e64aacebb6e1a74be5b14933174393cf3ae96c61fbd875a0c978b4b8dc6b3a2c3bbbaece13c801ac00df4ae4b5026ac76e94def578a7f7b0fa2884b6a91a5af5fbe0ca3f7d3f167d26b761d7f5489d5b92056f882431c18eb99100f176bbe90ea65cf16f29db8a78597d0acb83a5615df79718451aded57eaaee5b714dd7b39e24028a32e4882993b106b628b87dcc2d3bda0838f39535792d78bfc4d3306c81a3fb8ce44380f526da85b685f743d49d25be41cb87d6d5959617754df7c45a944d5a3a16a1c444f02b9ca0c9d8003c2ee70678836cdc72b0ea2320571aaf95607f33ebd1d06e563ed70b49631b46376e8e57b4db64328ac322d7b0edb7113e0efdf72c6435b0a913cf6fb828de80a3712c284936db6da7572b4fbffb0d1df9d8209b54c20b6b9bf93bf4bcc89e3d12315b30232d5365ce979ab38f0b7087fe94c9933b22be70847b42e8526d0cc85af72a00643531bf9815f200393657ae5e25575dd1c62c3ed315f89c56694c2cac06aa8ede1b8629ffb14623bc401e12cfe04bf55f27be493e5a8afb0df330b5d94773645e50ed859627d7eed080d054f53b3742afd5c411f40f39efd39438cbfa8a029f1abc14a02020bef1699e4e59779186709f6ec54b0b0ad70cd67fa69c9bace057f2fec6d92ac2bb2c555fb52d39d3479771e877c7435e0e29e1e6a24b4c1fb3c4b851918b0641a3aee53b31439a55edef3cdb00bec45de000e75fd8af426f36fcd9a14418837989d8f37eda0efdebd8c93811902dc297a933a78688b4471fccaf4a19800c90dcf1f287cbef9e6e3725d125b4a40d6578f98f2f91542a2bf48f78e0e9c676285fe8c6549b5669f364fca3de5c916e4ebf9b4ecdb54d9162747c5d603503641fcb26d95a29e9bb766d0301fcdb6313fb4dcf79c9ae57688310606c99884e959b6f25545237dd190be40f778389bd1d3bf56702967ba9a36797c4d76d3931b700cf5328e05a8ffbb864a506f13bbcc8cb665e6207226eedae05accdb76f1f3d879d56b0d9b13d7bd81b2a1b881074049ccd27cddfc294c53489d0f948f2e8bfe60c88bf4a5b65053362abd07af923ef6585001a551eb2b96495181889f98448d8ef8781ae469ce5823b541b3291d397083d346bb3bf14858deeb05d5ce7c39935bb3ecb9290305b621c3e81eb38fbbe5001a8482c8aeca45185a5ed27d20b11bad48aa4b54c329f1856481bed300a5a75b2e442883dd59a3382c33398b956231b2330e31b412a34dccf4eba92ff517152e7de8ec69b72a1e503ed5d7b4204daa9f5640911085abd3b3ba4b757f34433cd31bcedf54e8c629ede1f7299a431fe890b1288c383b713297c6a511002817fadf298998987d73a4b8bf73c5cd4a08f5b735fe642e4505c03660b2ab2ce0111a52c1af5196787e484150e0eef8b739d58bddf443af182771defb80127971006771ee662a084db3ea9107ea7f7302a835e3c761c61d4c630ecf21b1b0dce1d3f17a189befc113b4d56aa5d0a3dbb405d0c4cdfb72aa5d116ccf269b2d81aa58a94d3d5a5886b7a90712d816e7f5e607661a52034c3b5d0818ecf15dc8151e293f4c48fd8c3b6c7cd0c3701c2dc5dbb6a0204e3904c47bf2b96c262955653e1e4a482af8f5c83e3bb3088280b641fc94700a58d4bfb39c41f96b8d4c08be9deb09c6e5a1e2be87370ff8014a691aa4cb6f97787b87b1df86970e975b0a5aa1d30bb96c348cb54942c1278b2561b830a029251b2eab061fbb9279bfc924cc4fec6dbbf27b1f6a38b284d512ec49df92a73ff6ae789b5d0f49fdd736d0761bfba1479983c2a62c7e5232aaf8840abbaa758261e7fc8e06df8816b9cfca79b2b39d27962242bf724d8b7e1c503f9d7c884178205b29561dd528f8dddeca6245b6281d340baa0ad6966217b069678eb447270de416b4b61845c475e7b1d7805d45bea0cb1259f4871daeb11cc13208671b6b831c8b09d5f3d9181607e07eada6590ac55e760d76a1e51e24ae416b1fddc37c1f9991b2b0e4a31f0848190b7d0e4182f28c5657ffaf5702dc055156fefe4d1da2464dfe73eaaad0730102af60062830c4d90836ce00d940086c9cdf15e38ccbdb74993a0da9095bb71838311b2f07ef78db3e68b19648cb510a9cbef28d377261a97bb81d4dfabf454a284952f7ecfe50ff04aacda396448a75d374e9e3b5f0005bffc8a429f1485cb5f80b769d231be603403db33b694ed945145d5e8ab52b834daa3322becf2e1eb3a6a801e26faaa5f3b610123fa7e41e9fb175297fa8a0312d1b7d0e9f9b87731389e128bdc4b0c5ceb2dc0e727fe511e21ee6f02d48c3e5f97a0c3adf1e123de0bf70d95d8fef5778b842601dccdba5b910ae4689001fe48e92778486edc97062903400f34f03743b6ab5441fcae466e09c18e3b2bfff73c4f97a0e1775e088573b6702bf34da25d23ec57ce36677dfa410379354f9b99273416016f8f55cdf909e742429a2d96f4229adb43bbf838718dd1d3a1ca6950878b1acf061053717c82ce9fe081ac497cc1d4795d4dde249da19fbeac9bf829011dbbbb4b975e68b80fb07e1e885b71d562605ac552a163df61f25d4f7297b3ad4dfcb38ee96c902e851e6376473bfe686d9b7330ce362f765048da92fe7cbe71b894f8d9962cf44c7b46915ff397b8701f8ffae1c2b804299be4437845dbdc135e447f706c4cc2640f937669758ffe9d73808a615d686f246559da05fe23f1d0f5acca62535557021e6e139935d46e19c599759d6adc37f3d304ff40809c3cc0969b2d7f505e5b314155db7976fb031882948ea8719c4913fc8734a3b6638514408b88b949ee1ffd053b1ff03f77d19ad6d9461bcc6c52f79324a792536e00eb90ca0fea16e3df769dc8ad141c773f51a827d11e1c4fe446b405db330a571fa83e22348ee7fd45855f8f6cb5b2070ddec238de05993507383e9453440273112c25dbfd7b3e78f457e0631b65bac7c4f91e8cc7f825adbae17a9f5e854201631c7426dbf26846660266ae3d989e088f8a13fcf33e576acaab1a8d1ac4fdeda88771d04ae4ce9505ef85e16458a5fbb5efdb5e50caed7c1df351d0118a38bc638cf546d0d9d12320fd7b8dfae78367e917edd0c8de41fc7963995e7f63153b19132f804a2e7c8b663d346b8a80ba74b9ce5c66c4cefe9c860636fca54326a8e1e4079c1befdadff05bd68a9fc3e1a36d18c4416520a789bb16e6dbf6bcd4a5313cd46ce592a626a90753e7892386ebf009105e973f4676296dab0faa9dd80ba18d801056fc0c17e57967a1ce898be72d6ecdb8e5f516ce56b150020ec51b385f84104863dddbee70e30fc46941b1cdf375904ee1e3fa46361b280bbdf1e0bed02da1539ce8c4656d1f24f19b5943718b6a2a9bc6630bb29136f97dffe16d02cd8b0a7d2de1682bfb38bfa5bd11e500db7b2fa3b5ee8b3fa7c1eba2d62259dc849f763480708aa82d9a3162e7b0d44ad01fff92493139470d5cdd2209545dbd4df460dd005a2f2bcab8a9fa76571519d8bb1b4dd1b3031d0812fff3546d8258c9f45429518c6998da68e1d25fdb9ff3e863da2172a35c265d2387d161a8a01e8ce61b89787f413933b049473c38ef6f4ce5e3487a67078e1369d0753e723345140e6f915c23f46867c4308b38b9f0caa780c78b91268620ae7632729d3ae03c12b97488d838bba7e2a8e2eb1fbd1ad2edb19c11f502e1a6d517249eb35d79e21acbe93cbd284bcaddd4f40d865d6fe6415bba3b147d714283cdd4e32d0bf281b045b676b94c11c315f39a2eb2917cf4f65904f877c8b678f19499d1b45c78fe93be83beb42fd41895396a7644050386cf2a43380d94e7999177ef36d436acbe619b926dc5e792a5dd3ffdc173ee7c7e01a1d040feb3ad034368634dfb7cddf914153add53f96228055d4f5f45599aae7636aa004ab43879fc8fc06370aeb61b805f586c76c90a86d94f2179584208f59b2fd2915361219aa8618d8b95d2c33bcfa454fa854247ef823f75e337f66dbd441d70a9504f0e924b3e6380fda999cdb28318bb8cfbfadee67178ccb8620b329f286fe56deb2918c9337da217ee50ebfbb894690e359e0262f912cd0219074ca0a5bd37d9618832d07330b584774ed9de59e02bf1db5ba4f310ceb2cdd13a5a6203314c1f209d97b5c086219e6d218966fabe5b83510f1ff33bac5b1f4cf9a28e61bada43468d3bf651389ae0b893f9ce537f951e10c5fc55c4ae40e26a18c27170b6585ce647840bd5366bad29278861e4b96bfcc3ca1e6c81d64238be1fe3baf41720f00adce62c477a6cec51aa7757838a4ecad2b84f976a958dba89d9273db8629e0b1f815cebedc0ba9d86e3ea49e5dab900e7a4fc75531361587a99896482a4d46a9fdb9cd993df3b3b07fd86cb37ffca9b32b3667e2614ba92bf970c8dceaa6f5c8fe08a2c0b8efad7603a9593a745bb29bd539808407d750b40126acfd37031bf575d6537f57e0155c945f8f0b84424ced838f544ed2d1370b745939586491db2321f277f25438c45c6b2cc6fae83f323c9c74ff00868249284ac891a6078fb34b33d812c4fee9aea3ef100b854d348d006cf5a6d5604ef5a40729bca8a7aa78261627808adfc5afa5f8ba78dab88154c32526846d75620e3304ecf4946bba45979f876edbef659743bad6f8c9f2fb5d869c9d0a63502a7efe604b7d0e8724a0cb49b932a47d114297f8312051d7504ad6877d1ee5162df0a2eaebf923af1940fa91baa06e450a7a3919e28f2d9fe5dd5cc152bac8ad000cbfb3411d3d0e7c96882fc32a0be9da6d2b1c15dd6f5a2dd96dc6017a8dda181a9bc4a718fa1f4fa51c0301dbc5e1dea1b00eb57bbcd350de47531817e10be762bddab5fadcb6300836d96eccc522f97f7d1bbf78880f9453f634c1f3339b2dcb477750763bd3d399746d86f2649890e5b82a40d09341c4472e263b9b8553c0998e19162062a7dceef9adb99ff3653df0be154d720542840bc06a5bf5b27b0cbb92ff68130e7ee61e2124a2cbcd0999c486dcac0416283c7e3fcd34c28e089ea7b577814137a677e9698f3391507f25041cdecfb7f3c853b5eaca9d2ce9c79ca82ff8f25f9597fe358ac84ee9c06e63957a7ff91bc130f2732b16914de3a069363649d9fc99deb66641707af8bda6f09544617c6f2ffb58683f29ab44a2453a662eef40db3d0b947df065bda92c8864a94a1806256cea80fed50a79aa5d7d42b09def930f6166737c348922ae637c3824068e78c0e9833f196251c5f54b83dbd71e418d939ff0211072c459cf644b3d7f9ec53437de6801aa478e4de9c9df66f0ed5aa9347ff8937b58a096612652ae79a1c9040670b9977da436e13261e70b2bd4522a51b9b781b84876d786de9ada0695dc5c64452bc4fd38f3db54b6b512634c6ba550cc656ef4e5471ce34082d1ed503e3fdbde24ae7f9a665957ce7e081aa9c5166e975754351816c6fd473fcc2ef4569b7f300216d27f5b3a6c03e30bce0206af89e651c0e8f8ecca412b5677c30e7ca5349fc678bd78995f1980e2d1651bab92cdaea37fa89d55e63c62e670ae931842cb53c1ec32ee25bc959ae88fdd945c72323698d40862c6fae50baa9f5294aca84f41dde44a539c73803ca05371d6093927ace33999acb822e0f461073f4f6ea6c35576a8b0cecea6e166acbdabf8d7b1748f10ff8d016d5e31000954f041f6e4d921af210bae00ce529f6f57b3030be7d9d36382d5108de5592c19fcb6e812f197c8c9e289ee5529a7ae0298238d8da49e27ac0c2ac183cab18ffc133396f716647345cd6c8d16bb0550857c3e57d5460b690c88231c579e88f32fff56736cc403676f35fc69b08e8d1a4de6264293f80aab106189f1635d397cb1271480dcfed0ff52fa0c4ee4e5fdb6ebeec674d885a906fd8840c501705318a7218b0d9595bc2cff9dc064b2e12ffb6b9d251cda24c46cfbe98682288ba60e27d0e901e8b266e8079c054cf2c50a872c48314fd42c92b0c88a5791a064a35a84f6198ff65f297598770b873def0198347d23b5167d16582a1663c55c5e16c7b99ab8c05804899c3131b4ba3065eca19defee0026527917787a9fae8cb02a467e54c949f0f77bae2de2f4038718bc435e3056be12d54cba45c43972f07a741ecd166b954490cde86721dfa9b1d39dd7152a14fce39d69ccdca37b997cb07feecf2ec0b5dba53bcfd5efed52e01a91e89187c6f40d9afbbad15ac781ee698bca957de1fa4a672a04e1286c2e95d7dd919c488961e291f40047babc1b4352642cd7c48e9bb1e9d526917345b26c0aaf7975d1f52b26635e90c34c22c18020060d4b3f9f783ca483e0669a34708a5c77b19c2be149ed6aef8209703a3bb116800338bc5f9b7a6ca66bb742887084c9ec29116053a84073d5c7917383fd6b76ba25c6e99ba14f66878b0ca4f3754add3b89048d352494cb82950edc59cfb8bf733ba2e9d1b10c33250f5d6058efc1ad76958a5a5ccf6498d08da96ee1a64ecdae3dc8e0a2211875607e26e6987b0809c463281611e8c124a868db45bfd4f343e16b10b79af9c7e18cc45ada61ab7b30dd04008783fcfed5e43770ce4bf1005a06f48154f2e3cce616c01ca0fa388acba39a2b12dd3c50f00c5559fa37c22f2a96af3f6f178a180ad6fb9a29319fe16bd88506082dc04b91d865b19f5dd112640b5b447f03c36005eefacd19b13940709c32040f45d78473a723f458f501e3022f96dcd9e2a220a278a5aedf4ab8c5efd8741206d3ce33dbe99dd7e06cb1e48039145e25f6b0bcaa110b471dd2d5aac23f16ece95f306ea1da6698fbc7bd34b5786f58be34ad64b8a17342a615b7ada34ef60711fc5a37bdf367badb1d15f31c9397caa93453d603ca624801f520aad19360031ddb22f33f312880f94e53b4e1c2f67b8558921e61b6985de9246045f2906bb01fc491b458fb774c9abcef259c6e801fed2a5e7d9e2dc0b115e7cdb1f205c77286b629fa6cacebf1e03b3762aa5929aeaa715da9b105d8b9c4dc84b30e00b5c18cd9e6bcff190378962d925bad73a23472c61fcfc9f7bd6d16dc2c8d8aafd3ea51f0699ba958bd3323309bda4d7bd353ca54649b8c035f4e393b7b0f8fde9717134921ffcfe0ee7ec81514179b2e9ee03467b135010c540aa93e0d80a8e3339151f1df082d01e4741ee6698fd31fdfd21028136da05b62027eec47ced66a259438571e8ec18325900c736be9ce7eaf4cce2917cc4d165528b1084749447ab528b7ee1b77c756357536f20b99ad15c5d14b8ae20260adc42d3d73961a3a46a57330573188060940a7b18dca28cf824f8f5d66732cf5606e79339c9f9d1f4ec4d80ac1fde1e37794461bb80d675045bdbade42be90b88e11617e28867bf69d0fbad41aa9d0b98988347df76c3bd73e781e5eab40e0ae2eca5372bade8f8057838717816612adc7bc65e9b7e89bd13f89d38544f54107251bf56c621629858d925d7e3c46349c2b08bcbb2542bd4b8974de3d0564087730f676a254a38806bbf4c951cc16727f7229b2baad9bd6060729824bfb0cf32ad1f0e746940480356b3bf15dee8297ad46008127c5b185b21bfd8424e1c3d4812022a8fe9f27b4d2103759dd4bf0e29ad082c57829d6328c87400adcd0218b71036629fea424799d768df93b8696e55d4b90f7d54ef86d9c80524da92160ccd05223dcec8f616283583c5591ce8d926672f54e53363ce170e6d6799f103569a3e5d913fc762ad76307eea6405d6e70d76c486af4d5e6d80219d5073100be942b33cb294d5f34d79313fd052076eb9be078d38b8bcccb9316d1ff3980d70d45e4e7a600bf3c4feb98a09bfd2829078ce6bd084c8cfbe4baee0e3f1a3de0819284fdc15683f26fd80655446f7d4d7d6fa6d4ccaa7d49d6e59508c3dac5cbff486e5499399107f041fd6fec0c865203f21268d08c2620c6562cd2755739ea96d438d36b43e86a985919db89218784e8a6171f4a3a8b29e6433cdc4be9cc202a83e74af7e852fbb56329514ea9584d15e722e2be93ea271a40f9ca01290164919dee9d21a7adaa204b64e1a6a9bce2a78cb526e567076dd71df40a5f0d8817a7b25205d99810b38510c2c9737e0ca99369a20dec6231e076306ffbdce4e289d0e97ebfd5aef3956159748d9133f819b99497c2b13355f055952353e275f3a715dae348707ca050978d331bf2bc35237ad132f020cb2aa899490175d208c06d9b76279b05d8404eeee8b061258237a894cbb0b9bdedaeadc6934ebe0a6609fcde8c5e30fc1f83ccc315df9fdeb91b9ff18294c49b480e285c8be4fe2bf940ac6172737b0f4d304cdc7896a66e6995c04917e4fcfee53bb09eb40dec453a9021dcecfd157edb41789e6c6605c76bff032acc7714cdf98616a90679353cebac69f9bf9ec4561c82e2e2278da45020dbb53eb95af9d9ae103766126bb73b8e1cac99b2c8ca2850ab88a5b8b334ae70f93638799ca3265c3a986847fa7d09a17ea41a855f4194c00254948bccfff8e3e15fe5974aa2415aa8f3997f831b20b5d9f2062038eb5d5dd3175ac15cf9a0c006fc305265ab92ebd9a46a811eed8a55284723dee502d1f24eb6edf78a59d0fc9e3089c9a2666f77192c474d5ee78c73962a7425e21ab597714eb02900fb8c786513b4dec5b6396ea1cdeec20cac3527e7d25529db5ff9e9fb5e24ebede3b8d76d216848cb7b40af13b99d1a53a4fcceb85868da16938d474587c061fed8b0add8670596e3d21441f0f7608387941f7d91c7ffa16152fb19df3cc8c68db9806b3e38a9b77ccf9e8e99274bb4d84f5572d1babd1feb01d59a02bcf0062c9e572740e3b6c3c515c0850843a6bd6a5d2b41a5e036c8edbb24aa86e7b44095da2591a06ecbed29e240a04fbe1351e026fe4f22f76f04731a313ce3c706d26fec46ff1038007e5d30a2692b0f8f2001b6890b7e3748fdbb63877653cb63c7874710333bafcfdc12c999ce72f7d44c2191e21bf1f3f423f9007d58caca90cc85910075e99297f58f1e1dd35a28dc885fb956933e136a7d41245db7e2e003cde59873bc115e2e483ac1c4a04929c90e7ca56ea4a2f7af29e9afabb2069f2023ae7daae5a335cb5cb98850b564aa4db4b821035430d9dfaf8f52187ed33c0f7c03fa958b4a7fea00f1eacc26692b46b61c52b38c0bb8db80cc4e86fbf197538cfb4a5abe1cb83260133219f7b85d7fb033e4831b208763b7d6084f40d166ed0dcb8bc4d7b6a9375b3b1f974f24e83eb277e32367c59ec05fac2e8b3d9fa3bbf4989128d8807b751cdedc46c988b9f9c0d00f8223d73c6d45327c8933aed2e0fe2855938bbb3dcffbee251f95299721c27639d1ea6496c47f1c82b553108b9a86a8d3a6158e695162ba876f514488e5efaf8c78767e44d5bb5e7932336ea0c22f9fddf2de31952158e283a7e0e2e447ecd64e8e5d3601e21680a1d81c9a33873cf2fb6c998fd2692e0a767b11b43c83aa49289b93b5e58c34ac53a503dfa159632f450dbe98f1753c51001f7d28098e548a04e3e5ccdf9ec18e41d684d8acf9de751f774039ec77f22cf785aadcadc4f6de38cc91fc60b2fa58eb7b5423da5a8d1315e3841b5f47ab0068749ffde59cec3320d3f484b856678a9b26fe088de6da240b55154bd2f900014d966b071b6e48f6ed4db666948f21d5e8cd432e7521e9a622c22543ea533d68d83ccfc646424673a18880babc0813f28714a86b1a478e6a1a417ee45249e41d14f4613a679e172bf7d0515237764a7342a2a14bd085e7e89f23a8b7efcb2ad9944cf52c72b39ac58428941107979f2e340a874e91468e26f72e6cdfdd7272e3274a2e292c7c663f0bdd4f6a5c94e921e1c20924e6ac4fafe95883509f95511eeebf2c57f32074c267ca8503432c55a507aa233df1618da852df5663b1c8aa59a9b8b80ca0f90d0d8c3713cd519766ba5de6f0be50e94874e078143922b08fbac41661ad0de242e4f6efe9fcbcf5788e0f1ae9cd8bc3d83fde2bf5b67ef9ba66a2867fd304490330637c64a251ce68aede362663f4ee29d7e95be8729c4addc41346eb7611a846d0867bbef71ad66febff9c4e53c7971057739c3bc941974333c5868e99bc1a4b1e346b53e2fcf76e3f418f946a6ae1f1da0c0db0f6b758e55709d55775c90ada09595aaeb8664cd1c0610c1d8d0da9a145bf17a84232447dd844a70e0972dc7d77410e000d4fd5173dd10ce52b8dd6a9c040caeb43d181daa9361ec3c288fe3a7abd0c84d578c392b83ce4613104bf06637a876ab59f4b20208b8da412b88f3cb82760358d504f2a8c69e1825809d10533a86a8b4af719276a181a29b913a28568e8ebe4ec2f5e6d6d659ae8284f5a40b48a7bf31a08298801071d87b8118e6f8266f1af6b73b2b4cf3e5c4725a9dfdd24594da1fac200b2ebfdc37f0ba0d366965f8e0f48260b04f26f379b29d93482a7e2732d8a84b0b9f5a2984fd44d4c4fafe23ae823fa4d3bd70b125a3b4924b56edfad0be72d131eb6742ae363146b304ac0d1b5b1e1e011402844d4a521a2a896f2de70bb12ccdab4d58c8da7b778d780ea88a4a2ee7e2e23712ecd19d75f2fedea804c4e4e78d4e5259702096b716c829c43a9a7cabd57c424fa76f358ba24d5717097614a5bd51385ef3727229bf4dc32c1a637b8c323e8f2082ad32e7bd4935997d6f207dc353a678d75aaf2a0578ef669b2ec02894d78054600ae0cbc76af6a77dd16e15db4f98e7166f20c33f160cd83b6dd10a9b64f05a367aecbce1e615b803e329facda0c0a8bc69eebd665bccc9789951b9b950347ce702d7365e3f94dd4440453ed06a565084b7cb01ad93eb037bafac8270fbb5ab92b2d84a671f16722bce9842603d73160d388569c106a0ac82a5689abbc19c37340e5e9c6a0a86b7322c664774086fbc04b234eb9c95f7748a45812d3c99801b27f2f3afc94b96cc822be333580ed85f555fb8b5c6a4624374fd7be198b0abc1b65cd571a17bfa6bc506c3ad44e220789c7133bbc39452468e14b4b002442d9b6beafb86fe2e451f217e92607ac16ac568273c3a1f1de06c1589cd8f2e9eaa20d9a10f8c0ba87f66c13cf3bfc2e8242b0d1992c3be1599204231cca9e18c576269adb8f9c59ce295e0e985b725fd0a46c989ad0256e1617ae22ec97e907436b43c6ef5d50bcddabad445217f37d4e8090997014b8fa47eed7ba70e8ede7c3ee248373c4fa63f785aa83cc20cfa6fa7e2d334ab420ca41196bbdccfc4f7ba9dd632aa2ff308a4bb4eeeb664bdea2eeacaf8079bf7b741795f90d329070dca5c815fe72b29b4150547cf8c97903fdcb367b282332c18d4e0aa28df40c808b7a4b126f4eac8c43a63aac1e8a4120644e28bce0a5616313fca59afe5096377c29ed80e92eba83dbbc5054e3827db73dca7ceb4feb082c43284aaf1b16ae7f6968d28c3a97801d33d326bddb7a6f56ebe89100cdfdebc685a0ed134e05492f01c383b2bfe20a668b33b57ff573bd9867e61025fd98b211c81a3a3d93a0a3e6faea2485c1a509d13272710182dcb1c01d5e9555904cae29e1e19aad0aefa8b6fda4590ef166b909b72080310b4f1939938db388ba929243155d2bb0451bd56a8ccf59ef3bd115dc35e30d1495e035c9edb6d63ebd6605ca7b4678afe7eea5842064899be2f9c19ea4e4cad405f052c5dbfdcc83764af67a9629ff173fdce2dd7e61db0d914f30e0a894b5929bff8b0e951a9fac66c89f33b1fe0dbc02b34bcf53f86767f79eb4e75985e08bd4d3945074eb665cbbaaa299db476100f51e17ed910431062eac7a0b43bb9045adcb2b566c44371eb529f03498216db94e5bcee54729ff987338a84e58256c2507b6d11dad310db7a708647c15898664eccb62936446db10b2ff7e10418e1f97ee25afb63c4ec4d0aca4353ac2f754d8eb817181a64de32a924b21b96f95a62470c5a98a912817cb17e25db4ea088479bb8fc31b7427d6fcb7b837678e268647696e912194cb95847b70f148f294ecb4a69161ca6f2beef6c99e71b6f9829ea2f805755497ed49449694510eb8727a72992e2b25ffb5d1bb1d1e57e80f95bf2d97f21510727a24c42c68670011e686a80521256881fc403f98aa47772332813ae580ab7b59c45d4eafa9ae0d992446343facceb9626c9b9ce810b6098e872b3072a66e5f4ac37a3d22e752bcb68f048f34417ce2c344e24efb76f770ab05bbf0b9ffc5dec414776d34cd789bf930b711b9372fd02bb75d55df5e11f35879e23bef04658b07d0929d209a31541233112acdf651699e4d215b96ba7dbd707255af9726959beaa3c7b0524a03985ccb001521c1f31287f5eecd0fed802a6cfe2fa5ce2a3b3dad048ec04aabbe6785273c772346629d03f282a5c873bedee2e3845ab4f8f68d3b9618b8c27e9742eb7131e2180cd34324a5eca8462f681a760aa325c5afac2e6b62bbfeffb1ddee4770a50704db5ff51f168a3b54a1a6a4f18a7720bd85eb6d881e67048aa8ec9d0307ab0c7e8eb8785a886e0bf04a411a3ecd646ebdbc82931a04378052beae75998a6da2af02cf0f0e95d301343e96b966b8d7f7914add4c1502ca9ec890d832d1ffadad1738ad9a3fca798a5626acef2c215f00c1c34a99a27913730bbc9800e570843fb0e04abe5f05c1393795ea647090b280405b553a54012e0c9a32dd98f98808211194d94b71a372faf69474522e4875e8119aa068ba29987a5639bcff671d6d224a59a8087f74ee1a9a2f6d195c6f9168d1cdbcdadf0430e961fa5bdd017a42a06191138f4ce4c60be005922cda73f9af11a58f3f9f054526ed53b0b4e768c62bf3f05e8b53ec2276fda87dc3b696fa5a893df02d84d885b6a4b84cc3275b86ddfaff675c72fa04b47d5a01d7874708b67264eb8f7e82ee95fa2fed15fdaa853a81d63628dad45b240529784ca37a7db509cb45ff903f11a2b668ea0b187c2499be3fcbb7e5148be6108ebf93554ebe358a204a3e895ee8e60165a114fea55e9c7270f8887d8fc84beab935055e6c09015fce3381678952109704f311dc0d2e4cd4ad762e743ac8f325396d866f8248d380fc250780057c6ead7253f43af9024ed38f9a2341e6f0400290749bbcc28f74c36c216a36ff7726c1a933e15a4cb42f15292881844491898ba595444aaba6ee54d1c3941bdf6a87dde009868510f1f29aa00ba6291625c1fba1caf524d27163d0f59b94fe1526ab2b13db37b6c4f5e0dfb50a6348374313b30d3af767a9aadbbe1c94efeabe162f6da74251568e041ac3e3049f2d3d056021c00f365a3ca1b535a5ac23309c394aa8a073e6e6143e57af353471387b68518d6689d814a6a8ed41398d0be673d658fd71a4c7bb6aa6489c9976d1013009f7a60457fbc8cc191c8f927a0181a8e831e78b77a2f04099e1b5baf4d9a53078a7233e046f094775788a7b3cc68b0d6c177d3e93f42ddd9aabc2131c2106d38e76fbd5994d9ff2bb69796a2be8154fe20800d297ce8d3157468092711479f009515d1d158347a9ed97a58b7dba4882a0ba7067750881518eae86d40031b92abad1bd22592e4fd7d94551003114986939ffa14b20a41e92f3cc2eea1e76a1e54510b3ba9a9f59fbd438acaa217bc6d30d4c914bbabe8c79c8461068fec997c779e226cfca38a0b14c4e9c4586441079d38069af635473f8e559261e5e5ac43e5dd174ab2d9452bf0f12c313cdf26c1e3923c99ea40912fd68ba497d350e590e1b5df3f789153d87645cc762924bb0a30835eba2e80245708fad3fafbcb34cea965ef107faea039dd8005efbcc1643ad782cf7bb20185e1e84ff94928893666ed1bed5a1f61c62e13d3aa8c3acce6facc4375421958407ee3b41878f45e3e7b8c92a1f5486655b6ca7bf9f4b79aa9176e9fd4fa968c001b5e4a7a93123140805ecd91a87980f43ffbae50fd2a41674186fe25270fa43d3a24aa3eb54c115d28f90dcaaae084b174d0dda0882babcb9577c39eead2f40f939affcfc8d95f1b6660ae8b71eb16b0bc5738a1137a513a31e9074ba62efc7a39745669cc4003844d2f34cc85f310f979d274283cad616d1a788eb8b8670892f0e2c09083584ad7a963352b34e3201c416e19dd9cecb6266ecff70696e0578939aadfcb514a2df2214a2dea1009752d818ce7d0be63c7c09bc1a96c51b7f501867b676a0b8e1343f04995ee52360c9e90d717f51762687d4d5b9b535608ff7aedc92469e2449d2571f33a85923d02621a36c78ae4d211ba0793ee165349022c08d596cda0ddd5aa6139ec8c8fa7be8b99261051925e12945afcd781ddfe45f2af2d71f91d3f6459d5606774a1e736fdab65c832ede0c27bbb0a12b2db0e8341773b7c65b59287354b89f6f3d9e7d4308c8bdbb7c2c167f7da7626d5d2a50e0698af9ef71dd23a9ce41c5b6333064fbe6144cffb0a7ea1abbe189c086559f552adbb48eed6f976d12694178387b850c654bd7dfa43fdcb178307bc89a30510913df600192c304e66317be4bd73938db1aa1c2833cde6e58e49adb67151ec0b86e51bf4ea16c8321d2ac9669ad6acc6faf31d8e39d299e86a67025cd5b47a96b9b5142de5e416c283842965df66b0ecb141fa6972f4391445a36d65a9b787bbc2d9fa888ad4d46d82cabb8719a41e832053c3f3a567359b40c21df371e6630c36c1a278317bc0b0cc4a94c13104eaa49e041e490d41d175f2725ed5053cff48645c129257e8b59273f4f9c3723c79081d69233156a6f443d8c9d039050cf7669441f64eeaa67da2d4426f17afaf19bd8e0f7e8b2af1391652afe1d6755c7680632d6cd2e05da0f6808666b29ca30ded8adea722c1b160a5a358dc3254b0be72022ab6621d15ae129ecc6133a087e3c7678fb0b73bf803cd30c6d7f2e5475463c22d6eb32e2060592e6346190b528f021cefd5af5acfba923b4730a763ef1779bf5c5e354b5f56ca9053b4e22deeda96aa0b240634620af73391ad7e73e1051a547bbe1e523847cf663664e750d0c512d2a41332e4a8c5973f14e743d47cc3d756f30dc4fb303f8694e3d3aa0919faedc3cd230ea718a55134f4be1e2edfdeff353361b88d1bae53a7df92c0c20981e34450b94ceb7270caa463b7f2fe9d728c0ca8dc5e6b5be9f267ceeb7eb414172a453f579de2cbc71240fa417181cc15b56dad09165ba23116ce55cea05d80ff5487ce6597653b8702d1968843000d3e756d6bf1e5a774ce8d2aa46cd34608ab39a3cb197ad04dc80700083341fd4b7e6044b341f6bbd14f1024b44d9c15a8cf0dff5ddf3fdfff86e25113f8ca58e47983dd97f4c02e75c42105bd321b119cfd3e747d474eaf89fa443ed5f6f1c69274b33d740ba25b46abd4141bf37bfd9a9968fd7f8485697acf79a655bd4cdee20db34aeec98d6699149094aeda366de7fe1568c704c393efb11fd049c7820bc087f6eb67d2e06068468a92811c8ea052f757113e073f01e17ca1cdd4b736539fd3ef1f24f9fcd1d4b33b2ca936be8a1cb8254ee8f8b1aaa5b46738f0a4b6fe13bc7bb1bdf0bbca3913a98c0a3635c0a67de4cefa4488c25b50d6978861d21f0327235ea5610871fc918f942e7469612817ba65cc7b485202cfcab9167d14fa8faa7bf551d9486e5dc174f415a5cd5aea0a8e6dd317a0a0c0e476ffcec5ad2f8532f3d51114bd35a169890a9743f7dcfa82b7c4d6b31008b149bebedb0419a512d89deabd8b6cab4747d3f739821293735b5949ac40ba08e4276845c57aede62c2a5c18cb65cb95668c12f3f24ee754b5003383a17811092a68b6262685835eb4e7b31b924da110658c269bd5c3a85f6022c185214b25871eefc81273e8a8879e42f882985a26b497da569272d2df61e3b57c68e020c8eea0cd16260c10ed8eebc3a4eb87c1c0c8d583397cd4cb35fe13842cf56486356d9d933efa66026677593453807fe56d17dccd6fe50f4f87b6ada7e26ffeb65bb8099afff5cca3a417fb9cb7310e4415aeafd1d6d18eae258667c9f735b21bdd5189b00e9a8ea2bf0c097bfaffb0fa555d80ec34394f828cb854a0eb0f35fa8243588e2336355b32655584547787e6c66fb5357a4d7a18fcb00f9339cfd14388da42c512f2af76d2dcb881765f2f1cc52412428cb5004ae1f70c1b8a328d6e45aedcc8f44ca2100d71ae9ab78c9d4bea2d4d9f5491228bf870b31150a4859de391394395571012f62a03b1342ff80fbaa38ab10a090c54a036cace3010e481a8601783e10861143a5c94862534cfc74896d929c43bc79da1b3addabede6fea33164e71feabb7de42b0b89808c9be9495d9d0f94e7fb367430d80c60d9005216938ac60ce9295cfa63f1e7a908e529a106f296696aa2d464053c5d142a982974926707f48b38c4994cae386eb6efd8c858af399a74321c2649c65375fc3f9a12988b06ba0bcb1762c9df8fec37faa1fbacb7f8ebdcba7c8cc007eb098a56428c3acb83be64087572d41e9ffaa265a30eb44fc13ae98af67081a04b5ff6943fced21d9c2bc34ad109514ca09bd30a4c6c4362b0c8190da256b4e5769663884f3052d5a1688fef783e7bfdb0698ebe88d211c93c762baae7aab91d0c9ecba46cb5d42c56c268835cab3a1e39d87cbec3db0ad6cf5f6c1b70586d159355c16781f9d5011689e9be30c64da65c6bd9979b23e9fe81708d32f141eba64e9eefeba4abb01d59baeca6f4fd5066188957dec01e24e6a73bafb01ae8cf64acfe04c8bcc81c2a0f50916cab9fd1e7f596832083bb20b43a67d0143c014d8f370e989ffe5d1c3e40898b9bdbd888301427fd9e209a921850d525e875111345c92bd8e6ede9f33f1baf848bacf3659fbc12f4de9a9ed7d4a8fa9af7bd15663b693824af9e2e9d289252b2471c40175ef88560dfcb2476ead482a6e8f800b5b3a11d071ead99865414939163b3a27d672de1afda53046398e961a674e2fa3316c13163c844179d71a208096a89d26c361214450b10001ab88a5402b991113328d9d051e50dfc54884b9a2d9a281ae5a401f511a4923c8239322bc698def3e8977e6efe7f81df1bb740d76f06ddc5fdd8683bf8778d454693e835e0284496e9f375b6f6875552ba3b9b779ff12871a0601cf8267e37fe98802376e02cc5458b4d5ae0e75e2d722d0561c18b78ecca58743e77ac4340dd2fa9c57c085524c32e275b6687382ac9f80a75b63142de9bc98a8e8ec12f5b9aea5df55db190799c367001822480e138b54636a70bf3f1acf6e67e69235b7d5eea08f52247065f9e68443c171554d4bcc3ca4930781d8748bf371ce57d73e43b9e8f396e13fb58094d101afe9934c77f9e249ecd6dab0b31acb6f3fd8fca59120f9a7b7150a8ecbc79af4981a32875a34e37b08b373e01074fa4c826ebf9287498a49edda540600a86a3b4a6177ca86c0ba06b0134bfe8241fd8b5ce4a38960e496366ef53e7c3d5347047ab04ac433fca7d16c4c2c71475aa4bb6d6d5d5fe62b3649187caa096f02a27397fa3dcb2980be993a50d2bc0c80f0fc48f711b97d2d52c1024de47c61385275967de061b925bac8a94df6a1c426ed1e30581079d100e1b70a7e26f00e0ccec6fde4210a542cb37e36867e6c56b8f007308a1ca518fe55dce8851b5aea91317dc7ecce022aee505b97530ed22d3fe13c4095c26e48f0f2ccfcc71d7d7375e721a991d3cb876fe184c7b9c96b4011b313d03d04cd491f93ca56776b051c0fa7bf86bb260c20a585f7bb1ef51dd50564b18834c93b6599889c7ea4e4d38af3e67e97303ef6e3207a437563a506729d539509e94f291bfe8295fb5a535d4bf07d069adf74875aab2f29ee5cabfa0d137ede7670c2f319469378b96ff2d958b00833b9a6fa4b5964d00af020dff16d69cf6df572ad3c7aadd309f562690b070670055a36a965b9dcb7dfb027353e06af4d86a8d959c7fa83583c29baaba781eff7f59e186678fbbf6ac0ecccf29c5f56f177940e66c0b53fddc4bac95a977cd25e0ca2f766f56a85471f5ad139ff9513eb66d0f540d20dcfd477342aaa4da9ced03a0360105b97605a3ae96ee25c6b812d65c6b440487a0ab82fc2e04da556f13ab43b035b67612a7a1586c637ac4377b986e3a96719cf122073f72e74b106264bc3e544d600d3d3c0c1b10fef6bfecf8d8c4619022e6a5a8d3a7efffbacad14b6948c12ee2d116b308b0947dee0e086ddef933349da6f0d860c448784fd93028eb60b1830815f6fc75ae191bc7d6700812b008e287becf475b825ffbe5e60ca2a881cb8517cc1bcc5702474f98c25083abbd75b2294d742c2fad006347a5e8039a3cc6a07dd2e7c50c3f37e52e59e87ef653ad553282172e5b936d9841dfcfaddefcda4b36f22bb70f380a036cba9dcf698723b54d107612e337627311175651a0234a335ab628581edfb3a3bfeeb64ed38b70f4b00cc720c68b4fd738b3103f2e5da4d9453bedd0abcaf0354a47ba7f419bcbb554616ad730f597871ff8dfddbf17ade7bf77756f14108f7e93b1190982111dd9a0314698781d0f864354125cf0e066d334eddd175a8a12cd627a90c7b594afdc77cfa79df278d22e054727456f3556d4af9b486780eefc89be73b8f3a964d6c28ba4ec6725026a6a92ad03de69f188ab603e9be3ec971caed9c65eb4d0d7ab2bfca625097ea13470482b6b3913c71d156e40a5ab26fd5e27e94a5e1663500535e16ffe433bc68cec465bfd5638482aad6b16520cf2159e7ebe244a0c3f1dab4354e97477b04ce886969a8234f07d23079c6bdc7cc3001fe77bc62305754e836fcc761964ff0bdfbfb4680e3bd23fb549815ab1475b6d374e5079d9209c13d735c5fd3abae1571a28ef2d5ab149281f7337b4262c0e5d05e8d1c7f5a909b4b5201547d3855362188c67c7499738aac4554e0e87c90aa90981a1e80e5edbe7e3c7d74e11f76e9f67e97f6cfb5093079ef2d302a57bbb4d5a457a2c022eb364792bf04445da9ea03905e5f5ac3f5849659a4d145ec02f05002863040637c805f301df98498124ac055e834af761bd24ada462faecacc48248e3b94a56fa191557aac758fe9aa4143279b6a5c37b6e32bea6594661fc0c979382d9cfa84b9dafa446c76a9be1bfdd58bfd6933b9dfbbab0a69c124ca059d880894cffb237a387b9e4590bbb75e467d51c2e9eb34424b41744b010517dcb32d99d6d40a9a7b1924374898ed83d81e8d2e116c32147ce500edbbe67a9cce8b04d3ec6d9ac69a2a022ea86c7c76d37ee47a51562a6805b7dd972d7a10d136d2e82438e8fe50842f584460f20480196911d848edbb6720c4292a4d45e62a36fca21005eda1807ffeec3980a98a92031891bce0ff42a444609ae361032ff5e7c02b5fd649a0205394d93c2ecf474e9d601e2cd0645dff7d8f1036f9dfb9f212461cc04e1d8e0b4e5d665e7c3388e49339c41ad653794f498ec813f75f236a16b0da9b8bc5f58483310fc63f8e3cf230aa8948d3f36e81211e1ba1e97e951ac3edef787bf763106568ad97d5e6033bcaaf96a12fe7302ee11f76ef9343c7d35cb29ee5c366173275b8500559b99de2c0d1d2bcf7ce2022a018dd93f10ab02719a751ec62064ce5996524614bdeb2bce63fc332ceef15ea6c43b66ed75b31659eb1e96b859e5f49518872bf77d2725eab98f735521f9ed57e8104c17b6c5e314f13df83461e33ac0937b87c15e1216fc4568aefa11582fbd453eea811629b50656e10a445ba311dadb4205690f1d1fd6b1afa412bdfac76e40f5262191acb09eb15bdad27a4f7ef00e96bd8a93d08b3ecdee963877c277abb8d32f873caf3e41ffaca523e46e8c14c1bdef1db7cbc70c9c2812e9bef987ac803b13295ead579368b63d299874dd2e19b26b5dd27bc6030edf128cdfd6243d9d4b74e18066495aeeb536ecdd119be0e3d614098c82816227ee8d59b83f214f3330f956644fb1de9cfa4c33342945c72d8b85cbc2f8b3190f97ce1af8df84f2ff607ad04e96f6dafadce4b22aa94e9e0b92969418571a56d1c3d59c4eb17d0da3cc341b7061171d92098adb18906feabc220b8ea612d2bf0f3acad7f667a369f34e49c5da9480d676133a83717c26b7da35908d1af262bb2def076513043945101f4cabb1b41aa2fa2dd18fe623e9e67fde43702415e351574cc82ab7a5bd522a695c78150e79dae5d4797e1a8d2ccfd0b37744eee90fe737120f26fc928dcafb631936647a90f46cdf6bade2b2a1a86515a4200363503246f4bb88bd995c3dfd759c9c160dab1702193ad534c0f2a26d254948411b7f19d2edee4343f98ac7f9e0a6a6f32ce392f7666868f3e5a3ae55731cf60adab19b87d1cf87f1d47493a57faac8975b1c59e70d1d940a2b0c67482f224fbdb5e9a40e8998ca951e9db9b547f9cfc9b261e251b4469006452b674ea2a618ce3293bad669037e6258d22598481a8dd60f79cc336c70edb60c2784063e49f6e42b5ff8e475a8513ad0fd624aefd1dff970d244d7b26aabea23cd5cf9b755e28c1a2d3d6046a25e08399ef3fab1659a2ea7015f2480a58787726b05efa6e8778a21f8d0a55cadc87e10b42ae676b478a7103590c1095173cdceffc53793f68f78375e5e09b5c2d73e9b7d6f3b33f86b5064d7456fe8d77ed297773e4ad28d2d36363abbeb4f54caf285d0cae91d0bb450a98a16093fe03d9f354fe9c3a255fca17595ccbb84b49f2e5d0a124422ef1bf7c49ad010bd1244f29ede0f55afbd0653e20c49792229b7f1799a30c2f6593d000d50881bff65849b479b5d7e816702c26b0ba824d880eb3058108bd90a019a612af68f781dca4b4cfff900517b0b8d49123fd1d712c38126abd8c0ba37fc94c257bf157af19d67f29d313c4c4b287d3b18e24fc39d2158b4a43dde63ddd7c6d7e5470c20c8ea015e254ac51821f77db840b3e1dcb40f19cdae57364bae643492405fd7cc5ff5cc65dfaab87614c6e5846a1c7c0000618072c02f940b706a69b18fd356554765fabaacd465e1a393ed87beb5b3ae53eff72f42e8577f78f689bdae40be9436d04e23916ac6b84f87ab162fbbfd7acc7d3d66ab551007d4f2f521708c56635849c5c05d0dc8a7b81b99cc206e139bef21f92f50aae67322ae5f8c8f5748a89af6932cdc80dfcf9e87a1693b53588179aaa12d3dfd2d160540f2ab4c5160f08feba50dabbd12a58c04df97e1f21f146c487633a200882ad30a38b1f8c1b2308f5aa668a9611e042dd046296058ec624ef51d2d18988fe464dfcbe6090a31a123c0d3b84b0797b8dcc8e1a06fa7882c8632f0850cd2ace1533c27e59afe135c4e7ef9c4821ea77766238a47d2af0c3ffd95e14fabb3eaf00f1bdfc1b186bf413165c6d71f6698be29e89393fdbf80483726e59b4a60c98b1e5a439b2a1f41b2e3e84efdaf10ddc6790e9c53f0323a2d48bbeb7b4a3fac9b57c4e8284e11482c9767ffadc2c76bc4d39be20a291eb11ee3feef62dacaec4deccf0a699b2dea6060c91a5b5a6faf507160c2e72bb0beb1ce7c6dad3f3923d768c2afeb38e5baadd75fb676465680eb46dcd46e66ba025d4f849b2d450c4a4782b130278b5facdda3616265708974eda202d741476290a445ea181c3ff94241b1ee7baefd197d74fb0f2d22779737dd11d60cf3da9c532829adfb868dddae03adb130b75694a1138ad62360745aed19c02135a508055a1f698d515c57b3db5a94ddae35edf68b11ea44517d36ff89e207d66632abc64ed88eec5e3940677bdc8e971fec8f503f137638b23d701735f33c6b62558291299950b7b28b02510e8e7e9086beef7b4525adf06440c1411f3e018b082011f96c131b3b319e9665ddb26eab4a731910336759e24977707ae674c422b16adbf6840e55fdd44c93c89cd9e770b3bea5f5ad2ca1aebc20fc5588bbb48c34d84a5da0e9aa4d6f8b60795d32e40f1628687fc75ebe70b249acdbe29451c8208639293219208ef14439a09eb931a2cd32fc495cbe5317014e4ddf20be81183656411657bc42404397bd0ffdcddc0bba003627214fbd5b43ac374088c060c32238bdd3d4833207ad9b45b9b7e2b732b4be62b95aeae7f919957eb3b1daae2150912f86ce8c1679be3a69d570167ffbcaf1565ebcaa3e37d5c6010e5ab3e0b577ae62b96b42265a31f0370c5713efd51c1ab7c454f6047d2fbb037bf3c76e67c7f53f9d0266bb0576e9534c4c5576f8c7d37cc8792899d45c9bb6832a56dbabbe37a798e328abddf9deaed30223366b2e23e5f2e472c66c094ad0b32c5246a8773d672067003c00b6237daea954de561f2d3313de1faffbede50499714005392866e67e0502112b0b9742931718bca527290c30e5ba576124d60111ce7f4433a960b454909b7a9d7a4ac982d2411eda54dad5691479043bc302ee22c92da47aae4bd2e49640b01d951ed56424bf98c38a3da1ceb8b5d798f8c195594ae4bf4d654d910f09f1f514f60b21dc0acc83ddf99a926614acb74d8ebc9f984380399cf5fa82c5b7a931bd665ff7ab576fd84fef1206cbf2eb34b59d083f247c73ad93bd1c5796e90ac36f8ace11fb516b833c1c3dd0e465b0f4e3239a72afd72f3bfa7312334b997e6274fa2285cd216c02c399cc9dbb9ec1e25b966d99693a35ba07f2a291407ea4889efa594bbcb48590d085502fd8af36defd2f96479a173c461b06c3bdefedd44f6e613054140e0478adfdf42bff09b949ce443b5b8d2d5774d03442f0124ff1b5e334a4fa69d59db72269b4aedcbb3d5fe31d158a844bf4223c985f26e692f53d8e63918fd660b126dce1fdde9fac72071be5ac6663a028e493f2305f8fe8d135393b3db6c0c0af771c730c959cb26d838909c55208a4a1b68554264844fb73e574934ba03d6583dafb5e36815a28360ac1715d58a654fe77d27457016a2342188ac70a5030ddee13170c154826e8029cdae646e5252a8b7dfe648ceaf538d137717f37295169a14a542a73ba1bd430b93bec019ed6d2a8281a7c66f8d2130872b19a65fbc1928c20dc83e72778ab16461bb33bd28de5cc31529f2edba75374049d9bc54a1c3d5561cd3c464e001f45b3d06b3358b7fb784498b4607273a04ef5d446f6487bd91f9d09d0d3ab3f97d1b2ed3ad6c06ff0fd5e7f89d6e37830f0241fea8ed3009142e424cf91c6438177240510f3c11b759fd7c7be412013bd64468a74e24a5daecc85b00902a0695305464b21472d563d1429d470cccba604eb6e77884bacbecd84365946d1841d2d513f8a743e059e27186c3997ca9bd859214fd38b76ec1a0ddfc02ad1de2a2c4a185304e1f85485a1928127112558e5ffcc48702682b75f5b32794adc69273de937967f0e1738b524ce9a473dad0a17d1359288c7414d309478f6bce22517fb36a468a97c57c34e04d4a533096fd211d26ec29e4b43c5be901bc1a1a197bb18be32b821f6899c991a71449df5267b98afbd48feac214e7586ce32f68e8bdaf14c52a5c54b412f3c231c01cfe8af72060a255f233a993ee21682a7d6f747c1df42ce290114b9792a1c5ce79eb2ad1c1c2c2256b1b0b8cd15d5933f32b0d732926f7ca1637c4601273ed6939e70b31aaa17b618d9e4650c0ff1fa8a38f357aa48cdcd58045175f6d4199fda9276878d6a00d8cf05a63d38ed9718839748abbf5bb5461ea1d4f383145ffe9be525811baa3604c52374b187f7a8b010a71585e7ae0dfbbf534ce3a306e9fe899e90303e50e1aba6e87c7d5d65cdfde5a515a22ce85287a2bb5f0e38250d303eb99aa3434db34b99077af0a0aadd7331083eb98c127f7b230c97b262277ff9b116c9bba5dc7c7af962b5853cdd86b807296c687be7b5a915b3620a3de4dd9b34fdde76c70522cb183b9d817cde97b4a483126f23b46170c77105143fd2e4127efec45e0ff4ed6bc6fdbb7fa42c81a592ffe5f9504a5aadb6dc05c7bdc66a5df9aa57044f1d29b3c97b97cbbe5dd6be67397714eece49e9c07e4d5771089e8639255fc030808f7d0ba98c0cc07f5e8c56f9b2a4483afb2a211ae90ede60f2e31df8f8c355d2afbb5cb8687b89b9bdb4d49e0f55f2622c4797b3f44c84847ed07e949ccdd5bd76cabc715b67d5bcb2f8f0522e7d36d12d1c87bf7340468a4cf259f8d0e00df10161d46b76dcf86abb3d01d9e3eeba50c6f8c605c15185dbc5b60149b7c76888048cb0f858bd95653d0fa5307d2f946ef67b582d50a26b26729a1d65f6e2a79e4590508adbcae0484ca55eb4f800c00dd3d7ea649e06a97b6333551f734f190c3ae27a78943e313b6494f18d46ca48b3b17133e2f104bb0280ff375a3d39fc4daa66d56a4463f7e99c290965c0a890f8b8fa890074098aae9ba65879052bffe1a03a779fbd15ce62c8007d5e01964c9fcb73b4bd5041315c890e2b1ba9f0e290fb7154fecabde2bb48f562b041119c68e42f9b670eb69aceba5651eb94031f56d32a51698a998d47b46d350ac0863a55b036e38acf5db1b01cd82067fc7a746b3a816b074d47d8caecd287f94717620f970c85155cbdcba0e32a7a250a2b181832688650ad12f506a9c1618eefa0242f1adc772b9ea11eef0253e63b760870078816970928b8ffef7a45f08d1aa4d267a9c55163128eb39d2a36760f031dddc4b2935d97acc92a85f37da8aa2dcf7462f08d647c1d25232e22a82b653edf994b4b069636fa3e5b168669d3d96ede0e6d89c373aca7395cb14fd8a22a298f9f4e679125a6b410ccc59f6894f4533a787ac7d70e6779083efeed1aa85d568ea6a0130291a78763223d4cd43d15836f424a55b4dbf97af8f167295ccd4c34af92eb07d4980132bee5678dc9d85a764d9e847610c49056f1ec2c4a1565ed68340860cdfd4a0b6eb26f830d2c57412adb0e9e7c54f3dc6955f9ae81e4749ab4c4dec90cacdb06e748ee53dc04ca19a2fef057513a11d1087af3981a1fbee24670b32603cf1da30468b353252f93c1675878bb8f244e75079f2131f9cf5a78e8317636107085fe7e603c9b21f9f1de3a08175bdce06fdb625ec490d4952ad5e258ae677c2fadaa611bfe1b7f292a8124e59d4329fb1257c735aec244ca61d1e70606b9a8ccc82cf6fbf0a5a466fad7044a7b39243893af121cce8ca2aaaa066f0ca582246d2745246061c391173c7c6a9720d3763ec4b4be342c110954585e39fdfdcfe159795d0d3ab2500b23cb9fb4d9275ae29af341573d415e8d4958f6419d3f4985c88ed69882d7693759fdc92101249e2df52464152460a2aec25ce143707c75bd2fe781b8eaaedb9a4587a0a543ddbcd7be084fecef27482393e4a84034da507cc863b9fafac2e44502922249874100c7505d842b4522c62163be40c5a077e8abb33c5c8e645f57a93dbd4d21e0aea4768a002e088ad0f55a217ec5e185f663e7a99cd2a759bf36be49ec462ab7dc40528ce9259e3a3a3f2bb121abde9c95f43bbd66de8e2dd323787d8006bda7a4208a954d8fd3345095f04c360e61c27803efeb0fd502405a15130311eaf2aaa4d452d449292418510d2d646d2f57df963bf64ba2b819af5eca5ed8cfa65efd7c11173a7259c950ae59631055ca0491fa1ab45b7cce9864f0659fc5f1f840799fbffb3e175616cc9b4d30b5f05f90d434114506f7d446197618c4977dd3c803b0b8d6411663ebc42385617acc2a9a5238660aae7cc78db7bcc412d162163a30cf4bf13ec2821998a8dcc2ee095e9473b64cc05e1cc342c317b6b8c2e62f4e854cc023b6c92fd0449db626821d7c883524d3995dce7814b1cc69c1030161a1ae64c36967408d1654fbbaff8167a036d46be5f2bfbbf711388afe18e158e8fbd899533a605e08f694e26bb97bdd99a367b849451ee6547665551f9848fce3178b6da5df2c8fb87e6826f999ecfc3ee81e2a74ef4ff5b0100780d3f25156df093a256ebbb1a54b5c6c13a3a7f7b4d225d84e47f88bea0f6f7061eca225c304c0913bdeaa241ee94e555b1205f3b99832cb47172a778cef76165f7c763658d45945e9cbc85846690c867a40171d79665a30515bee1707aca873f60c8e726667530f7fd33775b3da3f723e57a5db23f2e84e203ef9392e6d5760f41d03f38beeddabcad3adcf88fa9d6c7e9c1a3e333efcace708686406b268a75cce12d68acb1b8111075b6d7efabd0fb8ae8f025f92eaa0e4c1c43ea7c726ab8e96dd9a2415d23a72e9a0fd0ccdd63f8788f5f8fc6e183f63430e4846b8a6c1d11c5a30ed413d1c1157f256efbfc44407d052d9ce9fbbd2e169c2c64fb105ecf7c2a606b83543c65b69dc0b74e2d27ea5be699f10081f0e7ee23f9c60b169819a2fcc066e1c24ddbd877f3f17648b1d51d6fec1189929fe1afc24eac4077e9a2976b1000bb9245c3f574004b75d74a4a4fe4f4086a8b59e9877212b08e6c6c43cae514c795131a0e7c9b50785dbbe8b40fb72407fafd970cfb13edb14fae05574032165da4677e9cc4e78701b245fcc389cc921dd775ccbd05d12f8066f1ad5ef2893e8ffed48181e1d3698e222881a0e85264dd96cbb245a51e086350c556e0a01c8aae7101560e18b06f0948a24d034ec0819cf42e731eed80bab54e6e9bae650c587712b391da955488abb1939615d63386a0064aab4952af0032b405b0a58ddf6512314ba5cc62ca5cbb176cbd64a78df005d128f8a848b9638505db8596ab2cb47e9b2ecb132b1417694115209d44bec29eeeffe8e4179e79b6283fdc38f157010a5233c51aec27e2b35cfad79cdf4f9bb7a163544cfb9f724e8a08defa90da810365976dceee5c13bceb571832e0241b7d958de3fdf0c81a2b04d4f700ece259a1d0a02dc2cd665e8c27901cf0e307b888c9fe2cceee6b7a60812f3b4ec70f59475e1be0a1fac39406d247a71c31ba8f4744a855179324078ff99783bd07ec0be641cdb133fcb29853835cce5b00fb9c31b52c3039469de3559acf66f33f2bad37f2e7726c82003c9c8f35e5e568ba3b61cd64131dfe2f4d152ea0ef1a71d0a714cd9cd393539a7a795866ab003513e721e710317139b9a01883395f380312bc4355be5529ac4a3a496f67b2495d361276164cf18c2916f838cf703671a9387462c1721291aebfd58940208a24c5706d16ce7d94b3bee7b248aceff591aeead3fe3aeb16ab87019279511d4091f7364b8deb8873d8f3189e4aa1c7df02477d5ba666efdb5162cfbd9dd5bcf0f71a84ab0cd53b9f1d94fa9c42ea6f2ff42413c702306ad7941bb46efa15944b2c0b7c5d829978440e00fd917b1218411e38024cda5172b87bdbaa19a6dd4c33ec0bbad32520f07c3a963676895914c706b023919cc622d401657179d9b732a2990bccf39fe994e852672302b466e2d7a97dcf2732539c2c7bb2746f0d0f01f855242c97dda6334e50ab4a38bbb69f66ba790d08141949e95676913c6074e5447f45bbb0ca8b2082c20482f1b3d6cbd876957a863150b909bc60fcce86bb722e62acbd2f4ca3688d07e0b00095b8dc4b2fe9243aa3d2b88d3442b7027a8ca152456f6bf59fe9e0ad4ec4ff7493a4c5438ce1458b7381e25ef71fb9382a8649808141c81752936484b8364a980a5d265459cae5660a032b38d507839cb0942f842e292ec629ecc3603b586bb69212534f914783679dced84822c610e57068d11291196c654005b84ab119730e25f931586b0880445e8dfd99dcf283bc64ff5aa8ef3fd6acacc9e6631c161b450fad09b0448ae27590488fadbc868e3d245c18748762541eb4daa6e18b520f217beee725eeaf1822ae32da684a8a3c198b12afe151707fba1a8874620c9a8d95c882014c940d88b7e19a60da38892c5996aa4805d18f0f239ba4ce2be8f60bb12274a692c4e871552a74c180854d1d9b16d8c5f9a4c3e04db7ca711b5e49e0aaf14538b30e0ca188da6ed49837e5957a6fd65fdc1e1d5e4569497212b477c81c45ecbf2d59c3941c6be36fd9f5274347deb2a80bfdd9d53f010d5933e057f0a329c30b81e3a79cd0f61c164fb251e2be5919a4f1236a3d05f72270f99ae475a52f66dc71cee6e99736457c2c5526066112f057b1e8c94373d6ccd017d07d280f5f19ba05a702d376461bb767ea89d561a0d13dbfb00497639374a40c828a3e58ce06fbfa472d24879ea640193e91c0226038598006575900b8de35ab3fdaf30d0702ff711898f4a118f1b9bf719066de7c60e436daada1f6d865cdb7b7137fe94a128461aa7dce9f2ed2026b0483f60fd87013de529cd048dfc3fd85a708cd6a5f995e66d50d6969c24aea96f8817fd5cfca95d1a4e3ee5053da2acfa47eb79a33c29aa85e3f94870d62f32b217572e84e573789803cac63ab57eb1dad12ff3a146c40a813865ad6408267c1bf80c363df8ab40ae4db483b1c212fb77967b2df2a24f1a81eaba9d2e3caf3406630ffa689f32d96c194abea775c9382b21a2a43f488336334650d7a253aaf865b15517418ed87643c518606879e9e948694bc9ab00f1349c523362b60fab5de0bfce1715d3bae9dc082f5863399002e2ce4b896d05e1321714136bcd4c0852d5245e264f84937523d188ec36e93c284fa58079b034f51155e61730abad93abb10fd6d3d86ea4fedec2955b6f344bde0ca78e9c538923635345590055794e043e1bd6c0cdb14ecfb29c426e1a638ae3937b1b4ca6307ec3532c6c6ac5c75cc4a3b18942670848dacf8ff88d830493f360b5cad756b0c31b12a332da443fa14bafc36adc102bae32695655318be00c68fa6c1a87bf90dcb3f8a1646c575e9e0d2214991922a92851989c3f6317c4862674fa48a15bdca4df9b39387c317ccec7c95a3ab1032c53b35a0811b4fd2ea2b83792ecc077a1739f804f129ed26b71c2754fa11634e608d42891b0212ed958823ee51f5ca6d76302c317db807aa59152c461f9c84065cb96edaeb4c27ea234b7e4e3c808b01a38aa4bbd341d5dde13af83a0a22980e3beb5aa389a5693433bac2392f3b9c22cb3c385e96b03ad9338472a97fdd46eccac33c9d43cf70828e0ca7f2491c9be0db1ff5ac367f974bc2865dd22565e9e934d406b2b680759e9bfe1f7da590fe9b4ab9416a89c18028158181dd4e6e168f3ce9e4f904e447fc8194c7401900438e3d79587aad7e94ddd72e1ff32b8bc732d6b08fb638dcb65ab924806dd60f074b3dbd07eddafe0e222942fc5f7bdbece12b932afe22746caac19e680742480de7832234e8d2107750aa58175cc8d2ff4a4652c7ba0fbd274aa696787a19e23fda67022b4e72d123aa7fc17319e197e8975d0c0c8663e31e5090c7083fd103179bec8e4d6a989885e3cb8b149329f5a89b19f4c112c7d9fa73db6d8a433341eda40e67e80964340b139a4b18419eabb85015250a44016056672c2927c3e6fb56312c64d907ccc027c71c20095a0209c40de41c9b54dc2b5757c9ff28c21fca0b3d8dedb79760ef455a00833ff663f341a22a1e86adb3c6188f4ed0481f39bfd23e9701c9912128a042577775b6d4e9e23eb6c5d74070c51bc58faa4cbb85608cb9903cbe0f5260adae1d1cb831579bff032b005a06caa29db945c525de432bcbe0c4e73b95051fd850c61be27e1c71ef2e25b410363fa8e201cc4dfbcfe9a08c29f0e292ef3e10d0ca5ba0025c0607e772b85fc04c58258ce6bdb25539d00f9b84fed4eb7c17e8f205da689beff9bde56b625fba011d2a3aaf07da6913ffc162cddb5ba42274eaa2e9ac70f5584989b7271d1c3260bb79ff8efa3039555cfa76ca5b507e13d8e141e94fce7303aaf1b24f4aa8c3bacb0b046bbc9cb73b2aa3f6c244430414f94b736c374dec352c9e124a6412d1c1b2f7038ee8d7d36c4abb4d94ba731a5999dd945012ecb5303331a33dc5701b1a6c671233f8a1615cd0423f6a395158274ead82d983887463ee298c204bd266045849b3a3b2ecbaca2d9b7d6dcb5346f8ceabd1d3f69fab3359b920ae8492e323cbdf36458be601cd870303b0c4e785fda12808e35dfbf886bfa5b93ca0634751f4ee6d944f785ca0a83fb495f23cb5bb1cd35100adc469c00486560c5c49ad9c5753454ac9818116605b74b6b136c5a43df6da75d23e955be4a5cfc5fce60cd4fd161b9694687615ffcfec1c8ed68f6189c6243833c6fbe8d9fbb5134d4e465236ab5d2b2a415907cd72705537a15710e77ed2133a33c654a76b8ad5392121c82b30937828827e9b8ff344b47f30b300fe4151b4dd864468e3e825e82ef804fc1478b9b395acf237a2d836e17021e5fb8b9c710f20d72d7f736b3c76478a958259f1a83787a6a13837c969ece9acf8f85d51aca1ca5a3d641cd6d771b2d7b04f76510e5a84ff58c0491b170b7488aea0d99e6df77c7d11883ba019ca8c307d5bb668d2a5d19ae5d979fd2e4a87885b34517d3eb9606ed3836015508750a4423949336b0f2b91fe2fb68d1e75b2a043a5e25d52e6739686364531f28627332b0858cb766890ee71605169cb66a89cf1b7c63b409804fc883c86a70b6feb53ab0ee839cb86dcac8998d1f106c51939bd094f07a4d06484cca6f05b4d7cfbdd359a8ded4cc14898ac10f874127ab7499962f915b2f4f1af1df38f9d444fd2535b6878ded0d0317de200c22df7f351df13f5402d1fd558db7fc13277e0a7c8c3be0f31d7b035e07f5e135dd802580ff250c1ff95f8ea4e61a98dd559919f8d631f5825f8a21a8db5b6a6c79931939285ff2156c1e61440891f422b5c9d45a1cb80d1427b93d3bea9bb521fc741000a3dc0bc3971851a8ff28494a12037894e50be8203edbd5e8a76e5f98d42cee7c719abc22e3997f3e1474f6d4c867b3c2885b173245bf3ebba51050860e29518775014a4e3db46471cfd3993cf9eda8665598b455098974a50c7ece56390591fc587ae9d1fdbb08bd0685afd2924a3d44394ffd1640823277763dc4c0c40ac41019598c79c3ff89fdeaaeeb2e5be9137c6834c30940e0e4bd2d4e8c557ada0a7f69d23988876e22c1429412af62190db6505b2c771e86114a6b623ccc6803703e3eecaf1adde5f54f6a99cd91abc168da5f9e21da0ebd9d64d37c3b9e98fcbc494f422cd7884262d3c4bfe923b99aebabbeae0350e0d2e7e9e8a3db523f80c41fa2e3819352d008980e7ddfd85b3d1cba7ddd082d0f24b3ee0dea95f343964c73f4a5d073360d1c577849d5d4d6c147abcfa53806dd5db7e526fe725f7c9eec26ade411bdbe84ed341b33f9241352b06ea42e23c9f4cd52a406267877e1fd2b42245801be76e250f837289f2e13294369b3551e9f577ce6eaba22007c1f3cf0bc38de6b3f117869666f8f70c760971248c4950a38f7e628e0b84e1f2013bb0053e648fc62e3ea7dddad9fa5768fb4e1368e5fef177228a71f9edb2acc47506697c49776b8d699c6237e3e86272f54e87b0db4d6d3c39402a351e9c3221c6345ebc87278897869669a30765d0d7b7cdb0998ccc9c61bae8408bc3933468c95d25f6b8ed7dadb8656ffa258b8c68b5623170907cc5271895fb7da98c3e2a2f6a159ca5629a95aedc5751c0479afad409f04df422623913ef2fe0e08e6989e568fa5f50b4b060fba6f6bacbd24c7534a116b57d1269812d01479253d50f529a33e6321825e5faad0b6dc72f0890de2784e759d65a1118d355a6ef4fcc0c3d50964139dc15a49577a85abce91878d24ff46292cd6690922c84fb5b8f722b1778d03eb6f334071feaf9311a94b33629a1880951293f7577da108350f96eabc367c12ea299786be15d31062809b91f460cae8b95ea3e711794c1e833a53189e392a327874f815e5a1fdec96fff767e3c89b785587dd1738334fd52d7ad154f158fa0586326ab988f676af69404595d6cd565c4757c693b5fe03f4421fbcfdd651ffb838f38744a8228dba2f7091e0d400d7266df182db193618005a29b06849e26fa583aee8052b59f502c3541e0c01314f90a97a5cd48810cee74aeb00448fc2b84b981c00df3ee714dd145cb5f711d4da5f421749f5d47a42fe9b615205313572957d3febc57d6b1254816577122f1619780229577234a6b843f6d1f687da5b2fae64b1380ad9b4ac686690f9536c46ee10f554fb6fe019b1b5455a91a791012d301ba5ff7349a18e5138c02de08c145b44b7c9724af077e44ffe419a5a33665bb2cbbae505e5e11e57a763c8061742e828518a2a4a0f9a02a9efbc561922729ff3de8a41167719fbf6dfdbd9c8680aad7a6ad359ae2dd717f052b76cf079a02b420a5c5db540764fbb7430888</script>
  <div class="hbe hbe-content">
    <div class="hbe hbe-input hbe-input-default">
      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">
      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">
        <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span>
      </label>
    </div>
  </div>
</div>
<script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">
    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" rel="tag"># 设计模式</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/11.%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F/" rel="prev" title="11.原型模式">
      <i class="fa fa-chevron-left"></i> 11.原型模式
    </a></div>
      <div class="post-nav-item">
    <a href="/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/09.%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F/" rel="next" title="09.工厂模式">
      09.工厂模式 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">zhengyidi</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">39</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">5</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">7</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/zhengyidi" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;zhengyidi" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="mailto:zhengyidi1357@gmail.com" title="Contact Me → mailto:zhengyidi1357@gmail.com" rel="noopener" target="_blank"><i class="fa fa-fw fa-envelope"></i>Contact Me</a>
      </span>
  </div>



      </div>
        <div class="back-to-top motion-element">
          <i class="fa fa-arrow-up"></i>
          <span>0%</span>
        </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">zhengyidi</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
  <script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  




  
<script src="/js/local-search.js"></script>













  

  

</body>
</html>
<!-- 页面点击小红心 -->
<!-- <script type="text/javascript" src="/js/love.js"></script> -->
<!-- 鼠标悬浮 -->
<script type="text/javascript" src="/js/mouse-float.js"></script>

<!-- 鼠标点击爆炸效果 -->
<canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas> 
<script type="text/javascript" src="/js/fireworks/anime.min.js"></script> 
<script type="text/javascript" src="/js/fireworks/fireworks.js"></script>
